home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 October: Mac OS SDK / Dev.CD Oct 96 SDK / Dev.CD Oct 96 SDK2.toast / Development Kits (Disc 2) / OpenDoc Development Framework / ODFDev / ODF / Framewrk / FWPart / Sources / FWPrtIte.cpp < prev    next >
Encoding:
Text File  |  1996-08-16  |  15.3 KB  |  510 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWPrtIte.cpp
  4. //    Release Version:    $ ODF 1 $
  5. //
  6. //    Copyright:            (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #include "FWFrameW.hpp"
  11.  
  12. #ifndef FWPRTITE_H
  13. #include "FWPrtIte.h"
  14. #endif
  15.  
  16. #ifndef FWFRAME_H
  17. #include "FWFrame.h"
  18. #endif
  19.  
  20. #ifndef FWFRMING_H
  21. #include "FWFrming.h"
  22. #endif
  23.  
  24. #ifndef FWITERS_H
  25. #include "FWIters.h"
  26. #endif
  27.  
  28. #ifndef FWPXYFRM_H
  29. #include "FWPxyFrm.h"
  30. #endif
  31.  
  32. #ifndef FWPXYITE_H
  33. #include "FWPxyIte.h"
  34. #endif
  35.  
  36. // ----- ODUtil -----
  37.  
  38. #ifndef FWORDCOL_H
  39. #include "FWOrdCol.h"
  40. #endif
  41.  
  42. // ----- OpenDoc Includes -----
  43.  
  44. #ifndef SOM_ODFacetIterator_xh
  45. #include <FacetItr.xh>
  46. #endif
  47.  
  48. #ifndef SOM_ODFrameFacetIterator_xh
  49. #include <FrFaItr.xh>
  50. #endif
  51.  
  52. //========================================================================================
  53. //    Runtime informations
  54. //========================================================================================
  55.  
  56. #ifdef FW_BUILD_MAC
  57. #pragma segment framework
  58. #endif
  59.  
  60. FW_DEFINE_AUTO(FW_CPartFrameIterator)
  61. FW_DEFINE_AUTO(FW_CPartProxyFrameIterator)
  62. FW_DEFINE_AUTO(FW_CPartEmbeddedFrameIterator)
  63. FW_DEFINE_AUTO(FW_CPartPresentationIterator)
  64. FW_DEFINE_AUTO(FW_CPartProxyIterator)
  65.  
  66. //========================================================================================
  67. //    class FW_CPartFrameIterator
  68. //========================================================================================
  69.  
  70. //---------------------------------------------------------------------------------------
  71. //    FW_CPartFrameIterator::FW_CPartFrameIterator
  72. //---------------------------------------------------------------------------------------
  73.  
  74. FW_CPartFrameIterator::FW_CPartFrameIterator(Environment* ev, const FW_CPart* part) :
  75.     fPresentationIterator(part),
  76.     fFrameIterator(NULL),
  77.     fCurrentFrame(NULL)
  78. {
  79. FW_UNUSED(ev);
  80.     FW_END_CONSTRUCTOR
  81. }
  82.  
  83. //---------------------------------------------------------------------------------------
  84. //    FW_CPartFrameIterator::~FW_CPartFrameIterator
  85. //---------------------------------------------------------------------------------------
  86.  
  87. FW_CPartFrameIterator::~FW_CPartFrameIterator()
  88. {
  89.     FW_START_DESTRUCTOR
  90.     
  91.     delete fFrameIterator;
  92. }
  93.  
  94. //---------------------------------------------------------------------------------------
  95. //    FW_CPartFrameIterator::First
  96. //---------------------------------------------------------------------------------------
  97.  
  98. FW_CFrame* FW_CPartFrameIterator::First(Environment* ev)
  99. {
  100.     return PrivFirstFrame(ev, fPresentationIterator.First());
  101. }
  102.  
  103. //---------------------------------------------------------------------------------------
  104. //    FW_CPartFrameIterator::Last
  105. //---------------------------------------------------------------------------------------
  106.  
  107. FW_CFrame* FW_CPartFrameIterator::Last(Environment* ev)
  108. {
  109.     return PrivLastFrame(ev, fPresentationIterator.Last());
  110. }
  111.  
  112. //---------------------------------------------------------------------------------------
  113. //    FW_CPartFrameIterator::Next
  114. //---------------------------------------------------------------------------------------
  115.  
  116. FW_CFrame* FW_CPartFrameIterator::Next(Environment* ev)
  117. {
  118.     FW_ASSERT(fFrameIterator);
  119.     
  120.     fCurrentFrame = fFrameIterator->Next(ev);
  121.     if (fCurrentFrame == NULL)
  122.     {
  123.         FW_CPresentation* presentation = fPresentationIterator.Next();
  124.         PrivFirstFrame(ev, presentation);
  125.     }
  126.         
  127.     return fCurrentFrame;
  128. }
  129.  
  130. //---------------------------------------------------------------------------------------
  131. //    FW_CPartFrameIterator::Previous
  132. //---------------------------------------------------------------------------------------
  133.  
  134. FW_CFrame* FW_CPartFrameIterator::Previous(Environment* ev)
  135. {
  136.     FW_ASSERT(fFrameIterator);
  137.     
  138.     fCurrentFrame = fFrameIterator->Previous(ev);
  139.     if (fCurrentFrame == NULL)
  140.     {
  141.         FW_CPresentation* presentation = fPresentationIterator.Previous();
  142.         PrivLastFrame(ev, presentation);
  143.     }
  144.         
  145.     return fCurrentFrame;
  146. }
  147.  
  148. //---------------------------------------------------------------------------------------
  149. //    FW_CPartFrameIterator::PrivFirstFrame
  150. //---------------------------------------------------------------------------------------
  151.  
  152. FW_CFrame* FW_CPartFrameIterator::PrivFirstFrame(Environment* ev, FW_CPresentation* presentation)
  153. {
  154.     fCurrentFrame = NULL;
  155.     
  156.     delete fFrameIterator;
  157.     fFrameIterator = NULL;
  158.     
  159.     while (presentation != NULL)
  160.     {
  161.         fFrameIterator = FW_NEW(FW_CPresentationFrameIterator, (ev, presentation));
  162.         fCurrentFrame = fFrameIterator->First(ev);
  163.         if (fCurrentFrame != NULL)
  164.             return fCurrentFrame;
  165.         
  166.         delete fFrameIterator;
  167.         fFrameIterator = NULL;
  168.         presentation = fPresentationIterator.Next();            
  169.     }
  170.     
  171.     return fCurrentFrame;
  172. }
  173.  
  174. //---------------------------------------------------------------------------------------
  175. //    FW_CPartFrameIterator::PrivLastFrame
  176. //---------------------------------------------------------------------------------------
  177.  
  178. FW_CFrame* FW_CPartFrameIterator::PrivLastFrame(Environment* ev, FW_CPresentation* presentation)
  179. {
  180.     fCurrentFrame = NULL;
  181.     
  182.     delete fFrameIterator;
  183.     fFrameIterator = NULL;
  184.     
  185.     while (presentation != NULL)
  186.     {
  187.         fFrameIterator = FW_NEW(FW_CPresentationFrameIterator, (ev, presentation));
  188.         fCurrentFrame = fFrameIterator->Last(ev);
  189.         if (fCurrentFrame != NULL)
  190.             return fCurrentFrame;
  191.         
  192.         delete fFrameIterator;
  193.         fFrameIterator = NULL;
  194.         presentation = fPresentationIterator.Previous();            
  195.     }
  196.     
  197.     return fCurrentFrame;
  198. }
  199.  
  200. //========================================================================================
  201. //    class FW_CPartProxyFrameIterator
  202. //========================================================================================
  203.  
  204. //---------------------------------------------------------------------------------------
  205. //    FW_CPartProxyFrameIterator::FW_CPartProxyFrameIterator
  206. //---------------------------------------------------------------------------------------
  207.  
  208. FW_CPartProxyFrameIterator::FW_CPartProxyFrameIterator(const FW_CEmbeddingPart* part) :
  209.     fProxyIterator(part),
  210.     fProxyFrameIterator(NULL),
  211.     fCurrentFrame(NULL)
  212. {
  213.     FW_END_CONSTRUCTOR
  214. }
  215.  
  216. //---------------------------------------------------------------------------------------
  217. //    FW_CPartProxyFrameIterator::~FW_CPartProxyFrameIterator
  218. //---------------------------------------------------------------------------------------
  219.  
  220. FW_CPartProxyFrameIterator::~FW_CPartProxyFrameIterator()
  221. {
  222.     FW_START_DESTRUCTOR
  223.     
  224.     delete fProxyFrameIterator;
  225. }
  226.  
  227. //---------------------------------------------------------------------------------------
  228. //    FW_CPartProxyFrameIterator::First
  229. //---------------------------------------------------------------------------------------
  230.  
  231. FW_CProxyFrame* FW_CPartProxyFrameIterator::First()
  232. {
  233.     return PrivFirstFrame(fProxyIterator.First());
  234. }
  235.  
  236. //---------------------------------------------------------------------------------------
  237. //    FW_CPartProxyFrameIterator::Last
  238. //---------------------------------------------------------------------------------------
  239.  
  240. FW_CProxyFrame* FW_CPartProxyFrameIterator::Last()
  241. {
  242.     return PrivLastFrame(fProxyIterator.Last());
  243. }
  244.  
  245. //---------------------------------------------------------------------------------------
  246. //    FW_CPartProxyFrameIterator::Next
  247. //---------------------------------------------------------------------------------------
  248.  
  249. FW_CProxyFrame* FW_CPartProxyFrameIterator::Next()
  250. {
  251.     FW_ASSERT(fProxyFrameIterator);
  252.     
  253.     fCurrentFrame = fProxyFrameIterator->Next();
  254.     if (fCurrentFrame == NULL)
  255.     {
  256.         FW_MProxy* proxy = fProxyIterator.Next();
  257.         PrivFirstFrame(proxy);
  258.     }
  259.         
  260.     return fCurrentFrame;
  261. }
  262.  
  263. //---------------------------------------------------------------------------------------
  264. //    FW_CPartProxyFrameIterator::Previous
  265. //---------------------------------------------------------------------------------------
  266.  
  267. FW_CProxyFrame* FW_CPartProxyFrameIterator::Previous()
  268. {
  269.     FW_ASSERT(fProxyFrameIterator);
  270.     
  271.     fCurrentFrame = fProxyFrameIterator->Previous();
  272.     if (fCurrentFrame == NULL)
  273.     {
  274.         FW_MProxy* proxy = fProxyIterator.Previous();
  275.         PrivLastFrame(proxy);
  276.     }
  277.         
  278.     return fCurrentFrame;
  279. }
  280.  
  281. //---------------------------------------------------------------------------------------
  282. //    FW_CPartProxyFrameIterator::PrivFirstFrame
  283. //---------------------------------------------------------------------------------------
  284.  
  285. FW_CProxyFrame* FW_CPartProxyFrameIterator::PrivFirstFrame(FW_MProxy* proxy)
  286. {
  287.     fCurrentFrame = NULL;
  288.     
  289.     delete fProxyFrameIterator;
  290.     fProxyFrameIterator = NULL;
  291.     
  292.     while (proxy != NULL)
  293.     {
  294.         fProxyFrameIterator = FW_NEW(FW_CProxyProxyFrameIterator, (proxy));
  295.         fCurrentFrame = fProxyFrameIterator->First();
  296.         if (fCurrentFrame != NULL)
  297.             return fCurrentFrame;
  298.         
  299.         delete fProxyFrameIterator;
  300.         fProxyFrameIterator = NULL;
  301.         proxy = fProxyIterator.Next();            
  302.     }
  303.     
  304.     return fCurrentFrame;
  305. }
  306.  
  307. //---------------------------------------------------------------------------------------
  308. //    FW_CPartProxyFrameIterator::PrivLastFrame
  309. //---------------------------------------------------------------------------------------
  310.  
  311. FW_CProxyFrame* FW_CPartProxyFrameIterator::PrivLastFrame(FW_MProxy* proxy)
  312. {
  313.     fCurrentFrame = NULL;
  314.     
  315.     delete fProxyFrameIterator;
  316.     fProxyFrameIterator = NULL;
  317.     
  318.     while (proxy != NULL)
  319.     {
  320.         fProxyFrameIterator = FW_NEW(FW_CProxyProxyFrameIterator, (proxy));
  321.         fCurrentFrame = fProxyFrameIterator->Last();
  322.         if (fCurrentFrame != NULL)
  323.             return fCurrentFrame;
  324.         
  325.         delete fProxyFrameIterator;
  326.         fProxyFrameIterator = NULL;
  327.         proxy = fProxyIterator.Previous();            
  328.     }
  329.     
  330.     return fCurrentFrame;
  331. }
  332.  
  333. //========================================================================================
  334. //    class FW_CPartEmbeddedFrameIterator
  335. //========================================================================================
  336.  
  337. //---------------------------------------------------------------------------------------
  338. //    FW_CPartEmbeddedFrameIterator::FW_CPartEmbeddedFrameIterator
  339. //---------------------------------------------------------------------------------------
  340.  
  341. FW_CPartEmbeddedFrameIterator::FW_CPartEmbeddedFrameIterator(Environment* ev, const FW_CEmbeddingPart* part, FW_CEmbeddingFrame* frame) :
  342.     fProxyIterator(part),
  343.     fEmbeddedFrameIterator(NULL),
  344.     fCurrentFrame(NULL),
  345.     fEmbeddingFrame(frame)
  346. {
  347. FW_UNUSED(ev);
  348.     FW_END_CONSTRUCTOR
  349. }
  350.  
  351. //---------------------------------------------------------------------------------------
  352. //    FW_CPartEmbeddedFrameIterator::~FW_CPartEmbeddedFrameIterator
  353. //---------------------------------------------------------------------------------------
  354.  
  355. FW_CPartEmbeddedFrameIterator::~FW_CPartEmbeddedFrameIterator()
  356. {
  357.     FW_START_DESTRUCTOR
  358.     
  359.     delete fEmbeddedFrameIterator;
  360. }
  361.  
  362. //---------------------------------------------------------------------------------------
  363. //    FW_CPartEmbeddedFrameIterator::First
  364. //---------------------------------------------------------------------------------------
  365.  
  366. ODFrame* FW_CPartEmbeddedFrameIterator::First(Environment* ev)
  367. {
  368.     return PrivFirstFrame(ev, fProxyIterator.First());
  369. }
  370.  
  371. //---------------------------------------------------------------------------------------
  372. //    FW_CPartEmbeddedFrameIterator::Last
  373. //---------------------------------------------------------------------------------------
  374.  
  375. ODFrame* FW_CPartEmbeddedFrameIterator::Last(Environment* ev)
  376. {
  377.     return PrivLastFrame(ev, fProxyIterator.Last());
  378. }
  379.  
  380. //---------------------------------------------------------------------------------------
  381. //    FW_CPartEmbeddedFrameIterator::Next
  382. //---------------------------------------------------------------------------------------
  383.  
  384. ODFrame* FW_CPartEmbeddedFrameIterator::Next(Environment* ev)
  385. {
  386.     FW_ASSERT(fEmbeddedFrameIterator);
  387.     
  388.     fCurrentFrame = fEmbeddedFrameIterator->Next(ev);
  389.     if (fCurrentFrame == NULL)
  390.     {
  391.         FW_MProxy* proxy = fProxyIterator.Next();
  392.         PrivFirstFrame(ev, proxy);
  393.     }
  394.         
  395.     return fCurrentFrame;
  396. }
  397.  
  398. //---------------------------------------------------------------------------------------
  399. //    FW_CPartEmbeddedFrameIterator::Previous
  400. //---------------------------------------------------------------------------------------
  401.  
  402. ODFrame* FW_CPartEmbeddedFrameIterator::Previous(Environment* ev)
  403. {
  404.     FW_ASSERT(fEmbeddedFrameIterator);
  405.     
  406.     fCurrentFrame = fEmbeddedFrameIterator->Previous(ev);
  407.     if (fCurrentFrame == NULL)
  408.     {
  409.         FW_MProxy* proxy = fProxyIterator.Previous();
  410.         PrivLastFrame(ev, proxy);
  411.     }
  412.         
  413.     return fCurrentFrame;
  414. }
  415.  
  416. //---------------------------------------------------------------------------------------
  417. //    FW_CPartEmbeddedFrameIterator::PrivFirstFrame
  418. //---------------------------------------------------------------------------------------
  419.  
  420. ODFrame* FW_CPartEmbeddedFrameIterator::PrivFirstFrame(Environment* ev, FW_MProxy* proxy)
  421. {
  422.     fCurrentFrame = NULL;
  423.     
  424.     delete fEmbeddedFrameIterator;
  425.     fEmbeddedFrameIterator = NULL;
  426.     
  427.     while (proxy != NULL)
  428.     {
  429.         fEmbeddedFrameIterator = FW_NEW(FW_CProxyEmbeddedFrameIterator, (ev, proxy));
  430.         fCurrentFrame = fEmbeddedFrameIterator->First(ev);
  431.         if (fCurrentFrame != NULL)
  432.             return fCurrentFrame;
  433.         
  434.         delete fEmbeddedFrameIterator;
  435.         fEmbeddedFrameIterator = NULL;
  436.         proxy = fProxyIterator.Next();            
  437.     }
  438.     
  439.     return fCurrentFrame;
  440. }
  441.  
  442. //---------------------------------------------------------------------------------------
  443. //    FW_CPartEmbeddedFrameIterator::PrivLastFrame
  444. //---------------------------------------------------------------------------------------
  445.  
  446. ODFrame* FW_CPartEmbeddedFrameIterator::PrivLastFrame(Environment* ev, FW_MProxy* proxy)
  447. {
  448.     fCurrentFrame = NULL;
  449.     
  450.     delete fEmbeddedFrameIterator;
  451.     fEmbeddedFrameIterator = NULL;
  452.     
  453.     while (proxy != NULL)
  454.     {
  455.         fEmbeddedFrameIterator = FW_NEW(FW_CProxyEmbeddedFrameIterator, (ev, proxy));
  456.         fCurrentFrame = fEmbeddedFrameIterator->Last(ev);
  457.         if (fCurrentFrame != NULL)
  458.             return fCurrentFrame;
  459.         
  460.         delete fEmbeddedFrameIterator;
  461.         fEmbeddedFrameIterator = NULL;
  462.         proxy = fProxyIterator.Previous();
  463.     }
  464.     
  465.     return fCurrentFrame;
  466. }
  467.  
  468. //========================================================================================
  469. //    class FW_CPartPresentationIterator
  470. //========================================================================================
  471.  
  472. //---------------------------------------------------------------------------------------
  473. //    FW_CPartPresentationIterator::FW_CPartPresentationIterator
  474. //---------------------------------------------------------------------------------------
  475.  
  476. FW_CPartPresentationIterator::FW_CPartPresentationIterator(const FW_CPart* part) :
  477.     FW_TOrderedCollectionIterator<FW_CPresentation>(part->fPresentations)
  478. {
  479. }
  480.  
  481. //---------------------------------------------------------------------------------------
  482. //    FW_CPartPresentationIterator::~FW_CPartPresentationIterator
  483. //---------------------------------------------------------------------------------------
  484.  
  485. FW_CPartPresentationIterator::~FW_CPartPresentationIterator()
  486. {
  487. }
  488.  
  489. //========================================================================================
  490. //    class FW_CPartProxyIterator
  491. //========================================================================================
  492.  
  493. //---------------------------------------------------------------------------------------
  494. //    FW_CPartProxyIterator::FW_CPartProxyIterator
  495. //---------------------------------------------------------------------------------------
  496.  
  497. FW_CPartProxyIterator::FW_CPartProxyIterator(const FW_CEmbeddingPart* part) :
  498.     FW_TOrderedCollectionIterator<FW_MProxy>(part->fProxys)
  499. {
  500. }
  501.  
  502. //---------------------------------------------------------------------------------------
  503. //    FW_CPartProxyIterator::~FW_CPartProxyIterator
  504. //---------------------------------------------------------------------------------------
  505.  
  506. FW_CPartProxyIterator::~FW_CPartProxyIterator()
  507. {
  508. }
  509.  
  510.